const fs = require('fs')
const compressing = require('compressing'); // 压缩成gzip
const _7z = require('7zip-min'); // 解压gzip
const { resolve } = require('path');

const replaceStr = /D:\\\\\\\\gx\\\\\\\\广东联通财务\\\\\\\\ant-design-vue-jeecg/g
// const fileName = './dist/static/js/chunk-vendors.22c77786.js'
// 匹配以chunk-vendors为开头并且以.js为结尾的文件名
const fileNameReg = /^chunk-vendors\..*.js$/
// 匹配以chunk-vendors为开头且以.gz为结尾的文件名
const decompressionFileNameReg = /^chunk-vendors\..*.gz$/
const fileNameDomin = './deleteChunkVendorsPath'
fs.readdir('./deleteChunkVendorsPath', async (err, data) => {
    console.log('所有data', data)
    if (err) {
        console.log('查找打包后的chunk文件失败');
        return
    }

    /**
     * 新方案：（只用修改一次内容）
     * 1.找到chunk-vendors.js与chunk-vendors.js.gz文件
     * 2.删除.gz文件
     * 3.修改chunk-vendors.js文件内容
     * 4.压缩chunk-vendors.js为chunk-vendors.js.gz文件，并且命名为1中文件名一样
     */

    // 1.找到chunk-vendors.js与chunk-vendors.js.gz文件
    let jsFileName = '', jsGzFileName = '';
    const fullPath = fileNameDomin + '/' // 完整路径前缀
    data.forEach((item) => {
        // if (item.match(fileNameReg)) {
        //     // fileNameList.push(item)
        //     // 找到需要解压的文件，解压之后再修改文件内容
        //     // if (item.match(decompressionFileNameReg)) {
        //     //     extractedFilePath = fileNameDomin + '/' + item
        //     // }
        // }
        // const path = fileNameDomin + '/' + item
        item.match(fileNameReg) && (jsFileName = item);
        item.match(decompressionFileNameReg) && (jsGzFileName = item);
    })
    console.error('jsFileName', jsFileName)
    console.error('jsGzFileName', jsGzFileName)
    console.error('jsGzPath', fullPath + jsGzFileName)
    console.error('jsPath', fullPath + jsFileName)

    // 2.如果有.gz文件，删除.gz文件
    if (jsGzFileName) {
        fs.unlink(fullPath + jsGzFileName, err => {
            console.log('删除.gz文件', err)
        })
    }

    // 3.修改chunk-vendors.js文件内容
    const res = await updateFileContent(fullPath + jsFileName, replaceStr);
    console.log('Tip: 修改文件内容结果', res)

    // 4.压缩chunk-vendors.js为chunk-vendors.js.gz文件
    // 先新创建.gz文件
    fs.appendFile(fullPath + jsGzFileName, '', (err) => {
        compressing.zip
            .compressDir(fullPath + jsFileName, fullPath + jsGzFileName)
            .then(() => {
                console.log((`Tip: 文件压缩成功，已压缩至【${fullPath + jsGzFileName}】`));
            })
            .catch(err => {
                console.log("Tip: compressing压缩文件报错", err);
            });
    })

    return


    // 待解压文件路径
    // let extractedFilePath = ''
    // const fileNameList = []
    data.forEach((item) => {
        if (item.match(fileNameReg)) {
            fileNameList.push(item)
            // 找到需要解压的文件，解压之后再修改文件内容
            // if (item.match(decompressionFileNameReg)) {
            //     extractedFilePath = fileNameDomin + '/' + item
            // }
        }
    })


    console.log('fileNameList', fileNameList)
    console.log('extractedFilePath', extractedFilePath)
    // // 创建新的解压后的文件目录,保存解压后的chunk-vendors文件
    // const unzippedFilePath = fileNameDomin + '/' + 'chunk-vendors.td.js'
    // console.log('unzippedFilePath', unzippedFilePath)
    // 如果存在解压后的文件，删除此文件，再创建新的文件 TODO
    // if (fileNameList.includes(unzippedFilePath)) {

    // }
    // fs.appendFile(unzippedFilePath, '', async (err) => {
    // console.log('ffffff', err)
    // if (err) {
    //     console.log('创建解压后文件目录失败')
    //     return
    // }
    // 解压文件
    // compressing.gzip.uncompress(extractedFilePath, unzippedFilePath)
    //     .then(() => {
    //         console.log('success');
    //     })
    //     .catch(err => {
    //         console.error(err);
    //     })

    // 解压gz文件
    _7z.unpack(extractedFilePath, './deleteChunkVendorsPath/chunk-vendors', async err => {
        // done
        console.log('err', err)
        // 解压之后删除原gz文件
        fs.unlink(extractedFilePath, err => {
            console.log('删除原gz文件', err)
        })
        // 找到解压后的文件地址
        fs.readdir('./deleteChunkVendorsPath/chunk-vendors', async (err, data) => {
            if (err) {
                console.log('查找解压后的文件失败');
                return
            }
            // 解压后的文件地址
            let tempExtractedFilePath = './deleteChunkVendorsPath/chunk-vendors'
            data.forEach((item) => {
                if (item.match(fileNameReg)) {
                    tempExtractedFilePath += '/' + item
                }
            })
            console.log('c cccccc', tempExtractedFilePath)

            // 更改解压后文件的内容 TODO
            // const res = await updateFile(extractedFilePath)
            // console.log('解压之后改动文件', res)

            // 压缩成gzip文件，放在原gz文件路径
            fs.appendFile(extractedFilePath, '', async (err) => {
                if (err) {
                    console.log('创建解压后文件目录失败')
                    return
                }
                compressing.zip
                    .compressDir(tempExtractedFilePath, extractedFilePath)
                    .then(() => {
                        console.log((`Tip: 文件压缩成功，已压缩至【out}】`));
                        // 压缩成功，删除./deleteChunkVendorsPath/chunk-vendors文件夹 TODO
                        // 删除文件
                        fs.unlink(tempExtractedFilePath, err => {
                            console.log('删除tempExtractedFilePath文件', err)
                            // 删除文件夹
                            fs.rmdir('./deleteChunkVendorsPath/chunk-vendors', err => {
                                console.log('删除./deleteChunkVendorsPath/chunk-vendors文件夹', err)
                            })
                        })

                    })
                    .catch(err => {
                        console.log(("Tip: 压缩报错"));
                        console.error(err);
                    });
            })

        })

    });
    // })
})
// const fileName = `./deleteChunkVendorsPath/${regFile}`

// 修改文件内容
function updateFileContent(fileName, replaceStr) {
    return new Promise((resolve, reject) => {
        fs.readFile(fileName, 'utf8', (err, data) => {
            if (err) {
                console.error(err)
                return
            }
            let str = data.toString();
            str = str.replace(replaceStr, '');
            fs.writeFile(fileName, str, function (err) {
                if (err) return reject({ result: 'fail', detail: err });
                console.log('修改成功', str)
                return resolve({ result: 'success' })
            })
        })
    })

}
